import {
	HTTP_REQUEST_URL,
	HEADER,
	TOKENNAME,
	HEADERPARAMS
} from '@/config/app';
import {
	Toast
} from './utils.js';
import store from '../store';
/**  
 * 发送网络请求  
 * @param {string} url - 请求的 API 地址  
 * @param {string} method - 请求方法（默认为 'GET'）  
 * @param {Object} data - 请求数据（默认为空对象）  
 * @param {Object} options - 可选参数，包含 noAuth（是否需要授权）和 params（是否使用特殊 header）  
 * @returns {Promise} - 返回 Promise 对象  
 */
function baseRequest(url, method = 'POST', data = {}, options = {}) {
	const {
		noAuth = false, params = false
	} = options;
	let finalHeader = params ? HEADERPARAMS : HEADER;
	// 直接使用uni API获取token，与login.js保持一致
	const token = uni.getStorageSync('token');
	if (!noAuth && !token) {
		// 如果需要授权但没有 token，则触发登录弹窗
		handleLoginRequired();
		return Promise.reject(new Error('未登录，请登录后重试'));
	}
	if (!noAuth) {
		// 添加 token 到 header 中  
		finalHeader[TOKENNAME] = token;
	}

	return new Promise((resolve, reject) => {
		uni.request({
			url: `${HTTP_REQUEST_URL}${url}`,
			method: method,
			// header: finalHeader,
			header: {
				'content-type': 'application/x-www-form-urlencoded',
				'token': token,
			},
			data: data,
			success: (res) => {
				console.log(res, 'rescode_判断');
				if (res.statusCode === 200) {
					const {
						code,
						...restData
					} = res.data;
					console.log(code, 'code');
					if (code === 1) {
						resolve({
							data: restData,
							response: res
						});
					} else if (code === 401) {
						// 处理 token 无效的情况 
						uni.clearStorageSync();
						store.commit('LOGIN'); // 如果有vuex状态也更新
						handleLoginRequired();
						reject(new Error('Token 无效，请重新登录'));
					} else {
						console.log(res, '1111');
						Toast(res.data.msg)
						reject(new Error(res.data.msg));
					}
				} else if (res.statusCode === 401) {
					// uni.removeStorageSync('token') // 清除本地token
					uni.clearStorageSync();
					store.commit('LOGIN'); // 如果有vuex状态也更新
					handleLoginRequired();
					reject(new Error('请求失败'));
				} else {
					reject(new Error('请求失败'));
				}
			},
			fail: (err) => {
				// 请求失败时的处理  
				reject(new Error(err.message));
			}
		});
	});
}

/**
 * 处理需要登录的情况
 * 清除存储的token和用户信息，更新vuex状态，触发登录弹窗
 */
function handleLoginRequired() {
	console.log('触发登录弹窗');
	// 清除存储的token和用户信息
	uni.removeStorageSync('token');
	uni.removeStorageSync('userInfo');
	// 更新vuex状态
	store.commit("LOGOUT");
	// 触发全局登录弹窗事件
	if (typeof uni !== 'undefined') {
		uni.$emit('showLoginModal');
	}
	// 如果当前不是首页，则切换到首页
	const pages = getCurrentPages();
	const currentPage = pages[pages.length - 1];
	if (currentPage && currentPage.route !== 'pages/index/index') {
		uni.switchTab({
			url: '/pages/index/index'
		});
	}
}

// 创建请求方法对象  
const requestMethods = ['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'];
const request = {};
requestMethods.forEach((method) => {
	request[method.toLowerCase()] = (api, data, options, params) => {
		return baseRequest(api, method, data, options, params);
	};
});

export default request;